package com.wehealth.three.lib_connect.device.usbdevice

import com.wehealth.three.lib_connect.utils.convertByte

/****
 * @author 栾桂明
 * @desc 定义一些和底层交互的一个固定的方法
 * @date 2023年12月18日
 */
abstract class DeviceOperationCommand {

    //定义通用的常量
    companion object {
        //指令开始字节
        private const val data_start = 0xa5

        //指令结束字节
        private const val data_end = 0x5a

        //获取设备状态字节
        private const val data_device_status = 0x01
        const val data_device_status_type = 1

        //开始采集字节
        private const val data_start_collect = 0x03

        //结束采集字节
        private const val data_end_collect = 0x04
        const val data_collect_type = 3


        //获取硬件的版本号
        private const val data_hardware_version_code = 0x05
        const val data_hardware_version_code_type = 5

        //获取设备信息
        private const val data_device_info_code = 0x06
        const val data_device_info_code_type = 6

        private const val data_center = 0x00


        // 开始采集的命令
        val startCommand = byteArrayOf(
            convertByte(data_start),
            convertByte(data_start_collect),
            convertByte(data_center),
            convertByte(data_start_collect),
            convertByte(data_end)
        )

        //结束采集的指令
        val endCommand = byteArrayOf(
            convertByte(data_start),
            convertByte(data_end_collect),
            convertByte(data_center),
            convertByte(data_end_collect),
            convertByte(data_end)

        )

        //获取设备状态的指令
        val deviceStatusCommand = byteArrayOf(
            convertByte(data_start),
            convertByte(data_device_status),
            convertByte(data_center),
            convertByte(data_device_status),
            convertByte(data_end)

        )

        //获取设备硬件版本号
        val hardWareVersionCommand = byteArrayOf(
            convertByte(data_start),
            convertByte(data_hardware_version_code),
            convertByte(data_center),
            convertByte(data_hardware_version_code),
            convertByte(data_end)

        )

        //获取设备信息
        val deviceInfoCommand = byteArrayOf(
            convertByte(data_start),
            convertByte(data_device_info_code),
            convertByte(data_center),
            convertByte(data_device_info_code),
            convertByte(data_end)

        )

    }

    /***
     * 开始采集心电数据
     */
    abstract fun sendStart(command: ByteArray)

    /***
     * 结束采集心电数据
     */
    abstract fun sendEnd(command: ByteArray)

    /***
     * 获取设备状态  电量 设备是否有什么问题 等信息
     */
    abstract fun getDeviceStatus(command: ByteArray)


    /***
     * 获取设备信息  设备的序列号等
     */
    abstract fun getDeviceInfo(command: ByteArray)

    /***
     * 设置设备的序列号
     */
    abstract fun setDeviceSerialNumber()

    /***
     * 获取硬件的版本信息
     */
    abstract fun getHardWareVersionCode(command: ByteArray)
}